﻿using System.Collections.Generic;
using Jay.Sc2.Bof.Lib.Action;
using Jay.Sc2.Bof.Lib.Tools;

namespace Jay.Sc2.Bof.Lib.State
{

	public interface IBuilding
	{
		int Count { get; set; }
		int Building { get; set; }
		int Total { get; }
	}

	public interface IUpgrade
	{
		bool Researching { get; set; }
		bool Available { get; set; }
		bool Have { get; }
	}

	public interface IState
	{
		IRace Race { get; }
		bool HaveSupply(int count);

		int Supply { get; set; }
		int SupplyBuilding { get; }
		int Food { get; set; }
		int Time { get; set; }
		double Minerals { get; set; }
		double Gas { get; set; }

		IBuilding Bases { get; }
		IBuilding GasBuilding { get; }
		int MineralPatches { get; }

		int Workers { get; set; }
		int Army { get; }
		int WorkersOnMinerals { get; set; }
		int WorkersOnGas { get; set; }
		int ScoutsSent { get; set; }

		int MineralsIncome { get; }
		int GasIncome { get; }

		void IncrementTime();
		double Score(IState destination);
		IBuildOrder ExecuteActionList(IActionList al, IGoal goal, IList<IAction> autoActions, IList<Scouting> scouting);
		bool IsSatisfying(IState goal);
		int FailedCount { get; set; }
		void CheckForScouting(IBuildOrder bo, IList<Scouting> scouting);

		IList<IAction> NeededActions { get; }
		IActionList BasicBuildOrder { get; }

		IState Clone();
	}
}
